package bl.document;

import java.rmi.RemoteException;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import o.销售单据类型;
import po.AccountBookPo;
import po.DocumentPo;
import po.Po;
import po.SystemLogPo;
import po.商品列表单项po;
import po.销退售单po;
import vo.AccountItemVo;
import vo.DocumentVo;
import vo.Vo;
import vo.CommodityListItemVo;
import vo.SaleAndReturnDocumentVo;
import db.Database;
import db.document.AccountInAndOutDocumentDB;
import db.history.SystemLogDB;
import dbservice.document.DocumentDBService;
import dbservice.history.SystemLogDBService;

public class SaleAndReturnDocumentBL extends DocumentBL{

	private static final long serialVersionUID = 1138435395409801689L;

	public static void main(String[] args) throws SQLException, RemoteException{
		try {
			Database.iniDatabase("127.0.0.1",3306,"seac2?useUnicode=true&characterEncoding=utf-8","developer", "19960623");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 AccountBookPo book=new AccountBookPo();
		   book.setName("accountbook");
		   DocumentDBService db = new AccountInAndOutDocumentDB(book);
		    SaleAndReturnDocumentBL bl;
			
				bl = new SaleAndReturnDocumentBL(db,new SystemLogDB());
			
		   
		  SaleAndReturnDocumentVo vo=new SaleAndReturnDocumentVo();
		    AccountItemVo item1=new AccountItemVo("3424221994950",1000,"收入1000圆");
		    AccountItemVo item2=new AccountItemVo("3424221994950",2000,"无");
		    List<AccountItemVo> list=new ArrayList<AccountItemVo>();
			list.add(item1);
			list.add(item2);
			//vo.set转账列表(list);
			//vo.set总额汇总(3000);
			//vo.set操作员("张鹏");
			vo.set客户("王泽浩");
		    //vo.set单据类型(财务单据类型.收款单);
			//bl.add(vo);
		    
			//bl.approve(vo);      //vo需提供单据编号
			
		   /* List<DocumentVo> list2=bl.getUnapproval();
			System.out.println("共有"+list2.size()+"张未审批收款单");
			for(int i=0;i<list2.size();i++){
				System.out.println("第"+(i+1)+"张未审批单据内容如下：");
				System.out.println("单据编号："+list2.get(i).get单据编号());
				System.out.println("操作员姓名："+((销退售单vo) list2.get(i)).get操作员());
				System.out.println("客户姓名："+((销退售单vo) list2.get(i)).get客户());
				System.out.println("总额汇总："+((销退售单vo) list2.get(i)).get总额汇总());
				System.out.println("转账列表：");
				for(int k=0;k<((销退售单vo) list2.get(i)).get转账列表().size();k++)
				System.out.println("银行帐户:"+((销退售单vo) list2.get(i)).get转账列表().get(k).get银行账户()+"，转账金额:"+((销退售单vo) list2.get(i)).get转账列表().get(k).get转账金额()+"，备注："+((销退售单vo) list2.get(i)).get转账列表().get(k).get备注());
				System.out.println("----------------------------------------");
				
			}*/
		   
		    
		    
		    DocumentVo to=new  DocumentVo();
		    DocumentVo from=new  DocumentVo();
		    DateFormat df = new SimpleDateFormat ("yyyy-MM-dd");     
		    java.util.Date from_date=null;
			try {
				from_date =  df.parse("2014-11-28");
			} catch (java.text.ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			from.setDate(from_date);
			from.setType(true);           //type为收款单
			from.set客户("王泽浩");
			try {
				to.setDate(df.parse("2014-12-29"));
			} catch (java.text.ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			//to.set客户("王泽浩");
			to.setType(true);
			List<DocumentVo> list2=bl.get(from, to);
			System.out.println("共搜索到"+list2.size()+"张收款单");
			for(int i=0;i<list2.size();i++){
				System.out.println("第"+(i+1)+"张搜索到的单据内容如下：");
				System.out.println("单据编号："+list2.get(i).get单据编号());
				
			}
			 
	}
	
	
	

	public SaleAndReturnDocumentBL(DocumentDBService documentDB,SystemLogDBService log)  throws RemoteException{
		super(documentDB,log);
		// TODO Auto-generated constructor stub
	}
	
	public SaleAndReturnDocumentVo _vo(销退售单po po){
		SaleAndReturnDocumentVo vo=new SaleAndReturnDocumentVo ();
		vo.set单据编号(po.get单据编号());
		vo.set类型(po.get类型());
		vo.set客户(po.get客户());
		vo.set业务员(po.get业务员());
		vo.setOperator(po.get操作员());
		vo.set折让前总额(po.get折让前总额());
		vo.set折让(po.get折让());
		vo.set使用代金券金额(po.get使用代金券金额());
		vo.set折让后总额(po.get折让后总额());
		vo.set仓库(po.get仓库());
		vo.set备注(po.get备注());
		List<商品列表单项po> po_list=po.get出货商品清单();
		List<CommodityListItemVo> vo_list=new ArrayList<CommodityListItemVo>();
		for(int i=0;i<po_list.size();i++){
			 CommodityListItemVo item=new CommodityListItemVo(po_list.get(i).get商品编号(),po_list.get(i).get商品名称(),po_list.get(i).get商品型号(),po_list.get(i).get数量(),po_list.get(i).get单价(),po_list.get(i).get金额(),po_list.get(i).get备注());
		      vo_list.add(item);
		}
		vo.set出货商品清单(vo_list);
		return vo;
	}
	public 销退售单po _po(SaleAndReturnDocumentVo vo){
		销退售单po po=new 销退售单po ();
		po.set单据编号(vo.get单据编号());
		po.set类型(vo.get类型());
		po.set客户(vo.get客户());
		po.set业务员(vo.get业务员());
		po.set操作员(vo.getOperator());
		po.set折让前总额(vo.get折让前总额());
		po.set折让(vo.get折让());
		po.set使用代金券金额(vo.get使用代金券金额());
		po.set折让后总额(vo.get折让后总额());
		po.set仓库(vo.get仓库());
		po.set备注(vo.get备注());
		List<CommodityListItemVo> vo_list=vo.get出货商品清单();
		List<商品列表单项po> po_list=new ArrayList<商品列表单项po>();
		for(int i=0;i<vo_list.size();i++){
			 商品列表单项po item=new 商品列表单项po(vo_list.get(i).get商品编号(),vo_list.get(i).get商品名称(),vo_list.get(i).get商品型号(),vo_list.get(i).get数量(),vo_list.get(i).get单价(),vo_list.get(i).get金额(),vo_list.get(i).get备注());
		      po_list.add(item);
		}
		po.set出货商品清单(po_list);
		return po;
	}
	

	public Vo approve(DocumentVo document) {
		Po po=documentDB.approve(_po((SaleAndReturnDocumentVo)document));
		Vo vo=new Vo();
		if(po.isSuccessed()){
			vo.successed();
			log.add(new SystemLogPo(((SaleAndReturnDocumentVo)document).getOperator(), "审批",((SaleAndReturnDocumentVo) document).get单据编号()));
		}else{
			vo.failed(po.getFailMessage());
		}
		return vo;
	}

	@Override
	public Vo add(DocumentVo document) {
		Po po=documentDB.add(_po((SaleAndReturnDocumentVo) document));
		Vo vo=new Vo();
		if(po.isSuccessed()){
			vo.successed();
			log.add(new SystemLogPo(((SaleAndReturnDocumentVo)document).getOperator(), "制定",((SaleAndReturnDocumentVo) document).get类型()==销售单据类型.销售单? "销售单":"销售退货单"));
			
		}
		else{
		    vo.failed(po.getFailMessage());
		}
		return vo;
	}

	@Override
	public Vo update(DocumentVo document) {
		Po po=documentDB.update(_po((SaleAndReturnDocumentVo) document));
		Vo vo=new Vo();
		if(po.isSuccessed()){
			vo.successed();
		}
		else{
		    vo.failed(po.getFailMessage());
		}
		return vo;
	}
	 public DocumentPo _po(DocumentVo vo){
		   DocumentPo po=new DocumentPo();
		   po.set客户(vo.get客户());
		   po.setDate(vo.getDate());
		   po.set业务员(vo.get业务员());
		   po.setType(vo.isType());
		   po.set仓库(vo.get仓库());
		   return po;
	   }

	@Override
	public List<DocumentVo> get(DocumentVo from, DocumentVo to) {
		List<DocumentPo> po=documentDB.get(_po(from), _po(to));
		List<DocumentVo> vo=new ArrayList<DocumentVo> ();
		for(int i=0;i<po.size();i++){
			vo.add(_vo((销退售单po) po.get(i)));
		}
		return vo;
	}

	@Override
	public List<DocumentVo> getUnapproval() {
		List<DocumentPo> po=documentDB.getUnapproval();
		List<DocumentVo> vo=new ArrayList<DocumentVo> ();
		for(int i=0;i<po.size();i++){
			vo.add(_vo((销退售单po) po.get(i)));
		}
		return vo;
	}

	@Override
	public Vo redRush(DocumentVo document) {
		Vo vo=new Vo();
		List<CommodityListItemVo> list=((SaleAndReturnDocumentVo)document).get出货商品清单();
		for(int i=0;i<list.size();i++){
			list.get(i).set数量(-list.get(i).get数量());
			list.get(i).set金额(-list.get(i).get金额());
		}
		((SaleAndReturnDocumentVo)document).set折让前总额(-((SaleAndReturnDocumentVo)document).get折让前总额());
		((SaleAndReturnDocumentVo)document).set使用代金券金额(-((SaleAndReturnDocumentVo)document).get使用代金券金额());
		((SaleAndReturnDocumentVo)document).set折让(-((SaleAndReturnDocumentVo)document).get折让());
		((SaleAndReturnDocumentVo)document).set折让后总额(-((SaleAndReturnDocumentVo)document).get折让后总额());
		Vo r=add(document);
		if(r.isSuccessed()){
			vo.successed();
			 log.add(new SystemLogPo(((SaleAndReturnDocumentVo)document).getOperator(), "红冲",((SaleAndReturnDocumentVo)document).get单据编号()));
		}else{
			vo.failed(r.getFailMessage());
		}
		return vo;
	}




	

}
